Design Pattern [Design Pattern] 생성(Creational) 패턴 동기화(synchronized)를 사용해 멀티쓰레드 환경에서 안전하게 만드는 방법 클래스 로딩 시점에 static field 가 초기화 되므로 객체 생성비용이 클 경우 단점이 될 수 있다. 다양한 구현체 (Product)가 있고, 그중에서 특정한 구현체를 만들 수 있는 다양한 팩토리 (Creator)를 제공할 수 있다. 객체를 생성하는 역할을 하나의 팩토리 클래스가 전담하게 하는 방법. 구체... Design PatternDesign Pattern [Design Pattern] 행위(Behavioral) 패턴 클라이언트 코드를 변경하지 않고 새로운 핸들러를 체인에 추가할 수 있다. 기존 코드를 변경하지 않고 새로운 커맨드를 만들 수 있다. 기존 코드를 변경하지 않고 새로운 Expression 을 추가할 수 있다. 집합 객체를 순회하는 클라이언트 코드를 변경하지 않고 다양한 순회 방법을 제공할 수 있다. 여러 컴포넌트간의 결합도를 중재자를 통해 낮출 수 있다. 컴포넌트 코드를 변경하지 않고 새로운 ... Design PatternDesign Pattern 디자인 패턴 - 컴포지트 패턴 정의 객체들을 트리 구조로 구성하여 전체와 부분을 계층구조로 만들 수 패턴 사용하는 이유 및 특징 객체들을 모아서 모두 똑같은 방식으로 다루고 싶을 때 사용한다. 이러한 점은 클라이언트를 단순화시킬 수 있는 장점이 있다. 하나의 메소드에서 전체 구조에 대해서 반복 작업을 처리할 때 자주 사용한다. 방법 실제 적용 UML 디렉토리 구조 레거시 코드의 문제점 새로운 메뉴가 추가될 때 마다 Wai... Design Pattern컴포지트Design Pattern Chapter 22. Command : 명령을 클래스로 만든다 1. 예제 프로그램 - 간단한 그림 그리기 프로그램 <Command.java> <DrawCommand.java> <MacroCommand.java> <Drawable.java> <DrawCanvas.java> <Main.java> 2. 연습문제 3번 - 어댑터 사용 <Command.java> <DrawCommand.java> <MacroCommand.java> <Drawable.java> <... Design PatternDesign Pattern 디자인 패턴 - 싱글톤 패턴 정의 싱글톤 패턴은 해당 클래스의 인스턴스가 하나만 만들어지고, 어디서든지 그 인스턴스에 접근할 수 있도록 하기 위한 패턴 사용하는 이유 및 특징 객체 중에 하나만 있으면 될 때 사용하며 스레드 풀, 캐시, 사용자 설정, 레지스트리 설정, 프린터 등이 있다. 자원을 많이 차지하는 객체를 필요할 때만 객체를 만들어 사용할 수 있다. 방법 레거시 코드 동기화를 진행하지 않았을 때 문제점 인스턴스... Design PatternSingletonDesign Pattern [Java]기본6~15강 까지의 내용 정리 클래스 메소드 사용 방법 메소드 실행 순서 over(넘치다)+load(저장하다)로, 메소드의 이름이 같으면서 매개변수의 자료형,갯수, 순서 중 하나 이상이 다른 경우 동일한 메소드 명으로 실행 가능 생성자 클래스 명과 같다 객체가 생성될 때 가장 먼저 실행 생성자 오버로딩 생성자의 이름이 같으면서 매개변수의 자료형, 갯수, 순서 중 하나 이상이 다른 경우, 메소드 오버로딩과 동일 import... Design PatternSingletonarraymethodJavaDesign Pattern 03. Decorator Pattern 객체에 추가적인 책임을 동적으로 부여 상속을 사용하지 않아도 유연하고 융통성 있는 기능 확장을 가능하게 함 Component: 각 구성 요소는 직접 쓰일 수도 있고 데코레이터로 감싸져서 쓰일 수도 있음 (class or interface) ConcreteComponent: 새로운 행동을 동적으로 추가 Decorator: 자신이 장식할 구성요소와 같은 인터페이스 or 추상 클래스 Concret... Design PatternJavaDesign Pattern 07. Command Pattern 요구사항(요청, 명령)을 객체로 캡슐화 시킨다. 다른 요구사항을 지닌 클라이언트를 매개변수화 시킬 수 있고, 요구사항을 큐에 넣거나 로그로 남길 수 있으며 작업 취소 기능을 지원할 수도 있다. 행동과 리시버를 한 객체에 집어넣고, execute()라는 메소드 하나만 외부에 공개한다. Problem 사용하려는 객체가 많고, API가 서로 다른 경우 번거로움이 존재한다. Solution Comm... Design PatternJavaDesign Pattern [Design Pattern] Singleton(싱글톤) Singleton(싱글톤)이란 인스턴스가 단 1개만 생성되어야 하는 패턴이다. Java를 사용하여 싱글톤을 만드는 방법은 다음과 같다. 생성자를 private으로 만든다. private로 생성함으로써 다른 클래스에서 사용하지 못하도록 한다. SingletonTest 변수 instance 를 null 값으로 초기화한다. getInstance() 메소드를 사용하여 SingletonTest 객체를... JavaDesign PatternDesign Pattern 구조 디자인패턴(3) -플라이웨이트 패턴, 프록시 패턴 객체를 가볍게 만들어 메모리사용을 줄이는패턴 자주변하는속성과 변하지않는 속성을 분리하고 재사용하여 매모리사용을 줄일수있다. 폰트패밀리,폰트사이즈 색상등이 겹쳐서 메모리를 많이 차지하고있는듯한 모습이다. 플라이웨이트 인스턴스는 불변해야한다. 플라이웨이트 패턴 장점 애플리케이션에서 사용하는 메모리를 줄일수있다. 단점 코드의 복잡도가 증가한다. 숫자나 문자열비교할때 == 쓰지말자 특정객체에 대한 ... Design PatternDesign Pattern 02. Observer Pattern 객체간 1:다 의존 관계를 정의함. 한 개 객체 상태가 변경될 때, 그 객체와 의존 관계에 있는 모든 객체들이 자동으로 알림을 받고 상태 갱신 1. 푸쉬를 받고자 하는 사용자가 등록 2. 특정 상황이 발생하면 등록된 사용자 모두에게 알리고 자동으로 데이터 갱신 Subject: add, remove, notify 메서드를 포함함 Object: update 포함 loose coupling: 그 ... JavaDesign PatternDesign Pattern 생성디자인패턴(2) - 추상 팩토리패턴, 빌더패턴, 프로토타입 패턴 목적은 클라이언트코드 (팩토리에서 인스턴스를 만드는) 를 인터페이스기반으로 만들수있게끔 해주는 패턴 클라이언트의 코드, 구체적인 코드에 의존하고있다.(new WhiteAnchor()) , new WhiteWheel()) 코드는변경하지않고 다음과같이 인터페이스와 클래스만 추가해주면된다. 팩토리메서드 - 객체를 만드는과정을 추상화, 구체적인타입의 인스턴스를 만드는과정을 숨기고 그위에 추상화되어있... Design PatternDesign Pattern 행위 디자인패턴(1) - 책임연쇄 패턴, 커맨드 패턴, 인터프리터 패턴 단일책임원칙의 책임이라고 생각하면 된다. 다음과 같은 코드가있을떄 인증/인가를 하려고한다. 첫번째방식으로 handler 의 코드를 바꾸는 방법이있다. 그러나 이방법은 SRP를 위반한다 두번째방식은 새로운 핸들러를 만드는방법이다 변화되는 클라이언트의 코드 SRP를 지킬순있게되었지만 ,여전히 남아있는문제는 클라이언트가 AuthRequestHandler 를 선택해야한다. 그리고 만약 기능이 추가된... Design PatternDesign Pattern [Design pattern] Abstract Factory Methods 🖇, (Creational patterns) Abstract Factory Pattern 🖇 연관된 서브 클래스를 특정 그룹으로 묶어 한 번에 교체 가능하게 만든 디자인 패턴 Factory method의 확장이라고 볼 수 있다. 잘 동작한다. Abstract Factory Pattern 동일한 처리 로직의 하위 클래스의 결합을 통해 선택적으로 객체를 생성할 수 있다. 다만, 새로운 객체가 추가된다면 하위 클래스도 같이 추가해야 되고 확... Design PatternDesign Pattern 09. Template Method Pattern 알고리즘의 뼈대를 정의하고 일부를 서브 클래스로 위임한다. 알고리즘 구조를 변경하지 않고 알고리즘의 일부 내용을 서브 클래스에서 재정의 할 수 있도록 한다. Problem 알고리즘들을 캡슐화시키면서 중복되는 코드가 여러 클래스에 존재 ex) 커피 만드는 법 (물을 끓인다. 끓는 물에 커피를 우려낸다.) , 차 만드는 법(물을 끓인다. 끓는 물에 차를 우려낸다.) Solution 알고리즘의 중... JavaDesign PatternDesign Pattern 01. Strategy Pattern 같은 종류의 작업을 하는 알고리즘을 정의 각 알고리즘을 캡슐화, 그리고 알고리즘들을 서로 바꿔 사용할 수 있도록 함 → 모든 알고리즘이 동시에 사용되는 것이 아니면 굳이 함께 넣어야 할 필요 없음 알고리즘을 런타임때 선택할 때 필요한 패턴 ex) 카메라 앱 필터: 카메라 앱에 모두 내장시킬 필요는 없음 → 필터 추가할 때 전체를 업데이트 vs 필터만 추가 Context strategy, ex... JavaDesign PatternDesign Pattern [Design pattern] Singleton 🙆♂️, (Creational patterns) Singleton pattern 단 하나의 인스턴스를 생성해 사용하는 디자인 패턴 장점 하나의 인스턴스 👉 사용 메모리 낭비를 방지 전역 인스턴스 👉 다른 클래스의 인스턴스들이 데이터를 공유 단점 싱글톤 인스턴스가 많은 역할(데이터 or 기능)을(를) 공유할 경우, SOLID 원칙 중 SRP, OCP 원칙 위배 👆 수정과 테스트가 어려움 꼭 필요한 경우가 아니라면 지양 구조 Code... Design PatternDesign Pattern [Design Pattern] 옵저버 패턴(Observer) 📌 상태가 변경되면 그 상태 변경에 따라 반응하는 구조를 구현하기 위한 패턴 observing할 메소드를 담고 있는(?) 추상클래스를 정의한다. 추상클래스를 상속받는 구체적인 구현클래스를 생성한다. play를 하면서 데이터 변경을 통보한다. 🙌 클래스나 객체에 의존하지 않고 데이터 변경을 통보할 수 있다.... Design PatternDesign Pattern Telescoping Constructor Pattern이 뭐야 [모두가 기술 면접에 합격하는 그날까지] 보통 빌더 패턴(Builder Pattern)을 설명할 때 비교 대상으로 자주 등장하는 디자인 패턴이다. 비교당할 때 빌더 패턴이 우수하다는 의미로 비교당하는데 각각의 장단점이 있어 자바의 API에서 많이 찾아볼 수 있는 디자인 패턴 중의 하나이다. 점층적 생성자 패턴(Telescoping Constructor Pattern)은 필수 매개변수를 가지는... 점층적 생성자 패턴Telescoping Constructor PatternDesign PatternDesign Pattern
[Design Pattern] 생성(Creational) 패턴 동기화(synchronized)를 사용해 멀티쓰레드 환경에서 안전하게 만드는 방법 클래스 로딩 시점에 static field 가 초기화 되므로 객체 생성비용이 클 경우 단점이 될 수 있다. 다양한 구현체 (Product)가 있고, 그중에서 특정한 구현체를 만들 수 있는 다양한 팩토리 (Creator)를 제공할 수 있다. 객체를 생성하는 역할을 하나의 팩토리 클래스가 전담하게 하는 방법. 구체... Design PatternDesign Pattern [Design Pattern] 행위(Behavioral) 패턴 클라이언트 코드를 변경하지 않고 새로운 핸들러를 체인에 추가할 수 있다. 기존 코드를 변경하지 않고 새로운 커맨드를 만들 수 있다. 기존 코드를 변경하지 않고 새로운 Expression 을 추가할 수 있다. 집합 객체를 순회하는 클라이언트 코드를 변경하지 않고 다양한 순회 방법을 제공할 수 있다. 여러 컴포넌트간의 결합도를 중재자를 통해 낮출 수 있다. 컴포넌트 코드를 변경하지 않고 새로운 ... Design PatternDesign Pattern 디자인 패턴 - 컴포지트 패턴 정의 객체들을 트리 구조로 구성하여 전체와 부분을 계층구조로 만들 수 패턴 사용하는 이유 및 특징 객체들을 모아서 모두 똑같은 방식으로 다루고 싶을 때 사용한다. 이러한 점은 클라이언트를 단순화시킬 수 있는 장점이 있다. 하나의 메소드에서 전체 구조에 대해서 반복 작업을 처리할 때 자주 사용한다. 방법 실제 적용 UML 디렉토리 구조 레거시 코드의 문제점 새로운 메뉴가 추가될 때 마다 Wai... Design Pattern컴포지트Design Pattern Chapter 22. Command : 명령을 클래스로 만든다 1. 예제 프로그램 - 간단한 그림 그리기 프로그램 <Command.java> <DrawCommand.java> <MacroCommand.java> <Drawable.java> <DrawCanvas.java> <Main.java> 2. 연습문제 3번 - 어댑터 사용 <Command.java> <DrawCommand.java> <MacroCommand.java> <Drawable.java> <... Design PatternDesign Pattern 디자인 패턴 - 싱글톤 패턴 정의 싱글톤 패턴은 해당 클래스의 인스턴스가 하나만 만들어지고, 어디서든지 그 인스턴스에 접근할 수 있도록 하기 위한 패턴 사용하는 이유 및 특징 객체 중에 하나만 있으면 될 때 사용하며 스레드 풀, 캐시, 사용자 설정, 레지스트리 설정, 프린터 등이 있다. 자원을 많이 차지하는 객체를 필요할 때만 객체를 만들어 사용할 수 있다. 방법 레거시 코드 동기화를 진행하지 않았을 때 문제점 인스턴스... Design PatternSingletonDesign Pattern [Java]기본6~15강 까지의 내용 정리 클래스 메소드 사용 방법 메소드 실행 순서 over(넘치다)+load(저장하다)로, 메소드의 이름이 같으면서 매개변수의 자료형,갯수, 순서 중 하나 이상이 다른 경우 동일한 메소드 명으로 실행 가능 생성자 클래스 명과 같다 객체가 생성될 때 가장 먼저 실행 생성자 오버로딩 생성자의 이름이 같으면서 매개변수의 자료형, 갯수, 순서 중 하나 이상이 다른 경우, 메소드 오버로딩과 동일 import... Design PatternSingletonarraymethodJavaDesign Pattern 03. Decorator Pattern 객체에 추가적인 책임을 동적으로 부여 상속을 사용하지 않아도 유연하고 융통성 있는 기능 확장을 가능하게 함 Component: 각 구성 요소는 직접 쓰일 수도 있고 데코레이터로 감싸져서 쓰일 수도 있음 (class or interface) ConcreteComponent: 새로운 행동을 동적으로 추가 Decorator: 자신이 장식할 구성요소와 같은 인터페이스 or 추상 클래스 Concret... Design PatternJavaDesign Pattern 07. Command Pattern 요구사항(요청, 명령)을 객체로 캡슐화 시킨다. 다른 요구사항을 지닌 클라이언트를 매개변수화 시킬 수 있고, 요구사항을 큐에 넣거나 로그로 남길 수 있으며 작업 취소 기능을 지원할 수도 있다. 행동과 리시버를 한 객체에 집어넣고, execute()라는 메소드 하나만 외부에 공개한다. Problem 사용하려는 객체가 많고, API가 서로 다른 경우 번거로움이 존재한다. Solution Comm... Design PatternJavaDesign Pattern [Design Pattern] Singleton(싱글톤) Singleton(싱글톤)이란 인스턴스가 단 1개만 생성되어야 하는 패턴이다. Java를 사용하여 싱글톤을 만드는 방법은 다음과 같다. 생성자를 private으로 만든다. private로 생성함으로써 다른 클래스에서 사용하지 못하도록 한다. SingletonTest 변수 instance 를 null 값으로 초기화한다. getInstance() 메소드를 사용하여 SingletonTest 객체를... JavaDesign PatternDesign Pattern 구조 디자인패턴(3) -플라이웨이트 패턴, 프록시 패턴 객체를 가볍게 만들어 메모리사용을 줄이는패턴 자주변하는속성과 변하지않는 속성을 분리하고 재사용하여 매모리사용을 줄일수있다. 폰트패밀리,폰트사이즈 색상등이 겹쳐서 메모리를 많이 차지하고있는듯한 모습이다. 플라이웨이트 인스턴스는 불변해야한다. 플라이웨이트 패턴 장점 애플리케이션에서 사용하는 메모리를 줄일수있다. 단점 코드의 복잡도가 증가한다. 숫자나 문자열비교할때 == 쓰지말자 특정객체에 대한 ... Design PatternDesign Pattern 02. Observer Pattern 객체간 1:다 의존 관계를 정의함. 한 개 객체 상태가 변경될 때, 그 객체와 의존 관계에 있는 모든 객체들이 자동으로 알림을 받고 상태 갱신 1. 푸쉬를 받고자 하는 사용자가 등록 2. 특정 상황이 발생하면 등록된 사용자 모두에게 알리고 자동으로 데이터 갱신 Subject: add, remove, notify 메서드를 포함함 Object: update 포함 loose coupling: 그 ... JavaDesign PatternDesign Pattern 생성디자인패턴(2) - 추상 팩토리패턴, 빌더패턴, 프로토타입 패턴 목적은 클라이언트코드 (팩토리에서 인스턴스를 만드는) 를 인터페이스기반으로 만들수있게끔 해주는 패턴 클라이언트의 코드, 구체적인 코드에 의존하고있다.(new WhiteAnchor()) , new WhiteWheel()) 코드는변경하지않고 다음과같이 인터페이스와 클래스만 추가해주면된다. 팩토리메서드 - 객체를 만드는과정을 추상화, 구체적인타입의 인스턴스를 만드는과정을 숨기고 그위에 추상화되어있... Design PatternDesign Pattern 행위 디자인패턴(1) - 책임연쇄 패턴, 커맨드 패턴, 인터프리터 패턴 단일책임원칙의 책임이라고 생각하면 된다. 다음과 같은 코드가있을떄 인증/인가를 하려고한다. 첫번째방식으로 handler 의 코드를 바꾸는 방법이있다. 그러나 이방법은 SRP를 위반한다 두번째방식은 새로운 핸들러를 만드는방법이다 변화되는 클라이언트의 코드 SRP를 지킬순있게되었지만 ,여전히 남아있는문제는 클라이언트가 AuthRequestHandler 를 선택해야한다. 그리고 만약 기능이 추가된... Design PatternDesign Pattern [Design pattern] Abstract Factory Methods 🖇, (Creational patterns) Abstract Factory Pattern 🖇 연관된 서브 클래스를 특정 그룹으로 묶어 한 번에 교체 가능하게 만든 디자인 패턴 Factory method의 확장이라고 볼 수 있다. 잘 동작한다. Abstract Factory Pattern 동일한 처리 로직의 하위 클래스의 결합을 통해 선택적으로 객체를 생성할 수 있다. 다만, 새로운 객체가 추가된다면 하위 클래스도 같이 추가해야 되고 확... Design PatternDesign Pattern 09. Template Method Pattern 알고리즘의 뼈대를 정의하고 일부를 서브 클래스로 위임한다. 알고리즘 구조를 변경하지 않고 알고리즘의 일부 내용을 서브 클래스에서 재정의 할 수 있도록 한다. Problem 알고리즘들을 캡슐화시키면서 중복되는 코드가 여러 클래스에 존재 ex) 커피 만드는 법 (물을 끓인다. 끓는 물에 커피를 우려낸다.) , 차 만드는 법(물을 끓인다. 끓는 물에 차를 우려낸다.) Solution 알고리즘의 중... JavaDesign PatternDesign Pattern 01. Strategy Pattern 같은 종류의 작업을 하는 알고리즘을 정의 각 알고리즘을 캡슐화, 그리고 알고리즘들을 서로 바꿔 사용할 수 있도록 함 → 모든 알고리즘이 동시에 사용되는 것이 아니면 굳이 함께 넣어야 할 필요 없음 알고리즘을 런타임때 선택할 때 필요한 패턴 ex) 카메라 앱 필터: 카메라 앱에 모두 내장시킬 필요는 없음 → 필터 추가할 때 전체를 업데이트 vs 필터만 추가 Context strategy, ex... JavaDesign PatternDesign Pattern [Design pattern] Singleton 🙆♂️, (Creational patterns) Singleton pattern 단 하나의 인스턴스를 생성해 사용하는 디자인 패턴 장점 하나의 인스턴스 👉 사용 메모리 낭비를 방지 전역 인스턴스 👉 다른 클래스의 인스턴스들이 데이터를 공유 단점 싱글톤 인스턴스가 많은 역할(데이터 or 기능)을(를) 공유할 경우, SOLID 원칙 중 SRP, OCP 원칙 위배 👆 수정과 테스트가 어려움 꼭 필요한 경우가 아니라면 지양 구조 Code... Design PatternDesign Pattern [Design Pattern] 옵저버 패턴(Observer) 📌 상태가 변경되면 그 상태 변경에 따라 반응하는 구조를 구현하기 위한 패턴 observing할 메소드를 담고 있는(?) 추상클래스를 정의한다. 추상클래스를 상속받는 구체적인 구현클래스를 생성한다. play를 하면서 데이터 변경을 통보한다. 🙌 클래스나 객체에 의존하지 않고 데이터 변경을 통보할 수 있다.... Design PatternDesign Pattern Telescoping Constructor Pattern이 뭐야 [모두가 기술 면접에 합격하는 그날까지] 보통 빌더 패턴(Builder Pattern)을 설명할 때 비교 대상으로 자주 등장하는 디자인 패턴이다. 비교당할 때 빌더 패턴이 우수하다는 의미로 비교당하는데 각각의 장단점이 있어 자바의 API에서 많이 찾아볼 수 있는 디자인 패턴 중의 하나이다. 점층적 생성자 패턴(Telescoping Constructor Pattern)은 필수 매개변수를 가지는... 점층적 생성자 패턴Telescoping Constructor PatternDesign PatternDesign Pattern